package cn.iocoder.yudao.module.pay.refund.dal.dataobject;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.api.pay.refund.enums.UnifiedRefundStatusEnum;
import cn.iocoder.yudao.module.pay.channel.dal.dataobject.PayChannelDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 支付退款单 DO
 * 一个付款单据，可以拥有多个支付退款单
 * <p>
 * 即 PayOrderDO : PayRefundDO = 1 : n
 *
 * @author 芋道源码
 */
@TableName("pay_refund")
@KeySequence("pay_refund_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PayRefundDO extends BaseDO {

    /**
     * 唯一编号
     */
    @TableId
    private Long id;
    /**
     * 统一退款单号，需保证全局唯一
     * <p>
     * 调用支付渠道时，使用该字段作为对接的退款号：
     * 1. 微信退款：对应 <a href="https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_4">申请退款</a> 的 out_refund_no 字段
     * 2. 支付宝退款：对应 <a href="https://opendocs.alipay.com/open/02e7go"统一收单交易退款接口></a> 的 out_request_no 字段
     */
    private String no;
    /**
     * 统一支付单号
     */
    private String payNo;
    /**
     * 商户交易单号
     */
    private String tradeNo;
    /**
     * 异步通知地址
     */
    private String notifyUrl;
    /**
     * 退款状态
     * <p>
     * 枚举 {@link UnifiedRefundStatusEnum}
     */
    private Integer status;
    /**
     * 支付金额，单位：分
     */
    private Integer payPrice;
    /**
     * 退款金额，单位：分
     */
    private Integer refundPrice;
    /**
     * 退款原因
     */
    private String reason;
    /**
     * 用户 IP
     */
    private String userIp;
    /**
     * 用户 UA
     */
    private String userUa;
    /**
     * 支付渠道编码，即 {@link PayChannelDO#getCode()}
     */
    private String channelCode;
    /**
     * 渠道订单号
     */
    private String channelOrderNo;
    /**
     * 渠道退款单号
     * <p>
     * 1. 微信退款：对应 <a href="https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_4">申请退款</a> 的 refund_id 字段
     * 2. 支付宝退款：没有字段
     */
    private String channelRefundNo;
    /**
     * 退款成功时间
     */
    private LocalDateTime successTime;
    /**
     * 调用渠道的错误码
     */
    private String channelErrorCode;
    /**
     * 调用渠道的错误提示
     */
    private String channelErrorMsg;
    /**
     * 支付渠道的同步/异步通知的内容
     */
    private String channelNotifyData;

}
